package com.ruoyi.serverinfo.service;

import com.ruoyi.serverinfo.config.TshockFileConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

@Service
public class TshockFileService {

    @Autowired
    private TshockFileConfig fileConfig;

    // 日期格式化
    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    
    // 允许的图片类型
    private static final String[] IMAGE_ALLOWED_TYPES = {".jpg", ".jpeg", ".png", ".gif"};
    
    // 允许的视频类型
    private static final String[] VIDEO_ALLOWED_TYPES = {".mp4", ".avi", ".mov", ".flv"};

    /**
     * 上传头像文件
     */
    public String uploadAvatar(MultipartFile file) throws IOException {
        // 验证文件类型
        if (!isImageFile(file.getOriginalFilename())) {
            throw new IllegalArgumentException("不支持的图片格式，请上传jpg、jpeg、png或gif格式");
        }
        
        // 生成文件名并保存
        String fileName = generateFileName(file.getOriginalFilename());
        String filePath = fileConfig.getAvatarUploadPath() + File.separator + fileName;
        file.transferTo(new File(filePath));
        
        // 返回访问URL
        return fileConfig.getAvatarAccessUrl(fileName);
    }

    /**
     * 上传横幅文件
     */
    public String uploadBanner(MultipartFile file, String type) throws IOException {
        // 验证文件类型
        if ("image".equals(type) && !isImageFile(file.getOriginalFilename())) {
            throw new IllegalArgumentException("不支持的图片格式，请上传jpg、jpeg、png或gif格式");
        }
        
        if ("video".equals(type) && !isVideoFile(file.getOriginalFilename())) {
            throw new IllegalArgumentException("不支持的视频格式，请上传mp4、avi、mov或flv格式");
        }
        
        // 生成文件名并保存
        String fileName = generateFileName(file.getOriginalFilename());
        String filePath = fileConfig.getBannerUploadPath() + File.separator + fileName;
        file.transferTo(new File(filePath));
        
        // 返回访问URL
        return fileConfig.getBannerAccessUrl(fileName);
    }

    /**
     * 生成唯一文件名
     */
    private String generateFileName(String originalFileName) {
        // 获取文件扩展名
        String ext = originalFileName.substring(originalFileName.lastIndexOf("."));
        // 生成文件名：日期 + 随机数 + 扩展名
        return sdf.format(new Date()) + "_" + new Random().nextInt(10000) + ext;
    }

    /**
     * 验证是否为图片文件
     */
    private boolean isImageFile(String fileName) {
        if (fileName == null || fileName.isEmpty()) {
            return false;
        }
        
        String ext = fileName.substring(fileName.lastIndexOf(".")).toLowerCase();
        for (String type : IMAGE_ALLOWED_TYPES) {
            if (type.equals(ext)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 验证是否为视频文件
     */
    private boolean isVideoFile(String fileName) {
        if (fileName == null || fileName.isEmpty()) {
            return false;
        }
        
        String ext = fileName.substring(fileName.lastIndexOf(".")).toLowerCase();
        for (String type : VIDEO_ALLOWED_TYPES) {
            if (type.equals(ext)) {
                return true;
            }
        }
        return false;
    }
}
    